home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 3: CDPD 3
/
Almathera Ten on Ten - Disc 3: CDPD3.iso
/
scope
/
151-175
/
scopedisk168
/
tinytools
/
include
/
init.i
< prev
next >
Wrap
Text File
|
1995-03-19
|
5KB
|
217 lines
; The stuff below is some pretty basic support and initialization, and
; should be replaced easily with the includes and macros used in your
; assembly system. I don't think you'll encounter many problems when
; trying to assemble this.
OPT A-,M-,O+,O3-,OW-,I+,P+,S-,T+,W+,D-,X-
; Define global variable structure pointer
GP EQUR A5
; Equs private to initialization code
InitError EQU 100
NormError EQU 20
; Some LVOs & equates (can be gotten by including dos*.i & arpbase.i etc.)
_LVOArpAlloc EQU -384
_LVOArpAllocMem EQU -390
_LVOArpLock EQU -408
_LVOArpOpen EQU -396
_LVOAtol EQU -258
_LVOCheckAbort EQU -270
_LVOClose EQU -36
_LVOCloseDevice EQU -450
_LVOCloseLibrary EQU -414
_LVODoIO EQU -456
_LVODelay EQU -198
_LVODeleteFile EQU -72
_LVOExamine EQU -102
_LVOForbid EQU -132
_LVOFindPort EQU -390
_LVOFindTask EQU -294
_LVOGADS EQU -252
_LVOInput EQU -54
_LVOLock EQU -84
_LVOOpen EQU -30
_LVOOpenDevice EQU -444
_LVOOpenLibrary EQU -552
_LVOOpenWorkBench EQU -210
_LVOOutput EQU -60
_LVOPermit EQU -138
_LVOPuts EQU -240
_LVORawDoFmt EQU -522
_LVORead EQU -42
_LVOSeek EQU -66
_LVOSetProtection EQU -186
_LVOStamptoStr EQU -564
_LVOStrcmp EQU -522
_LVOUnLock EQU -90
_LVOWBenchToFront EQU -342
_LVOWrite EQU -48
ACCESS_READ EQU -2
ACCESS_WRITE EQU -1
ArpVersion EQU 39
ds_Days EQU 0
ds_Minute EQU 4
ds_Tick EQU 8
fib_DateStamp EQU $84
fib_SIZEOF EQU $104
FORMAT_DOS EQU 0
IO_COMMAND EQU $1C
IOTV_SIZE EQU $28
IOTV_TIME EQU $20
LEN_DATSTRING EQU 10
LN_NAME EQU $A
MEMF_CLEAR EQU $10000
MEMF_PUBLIC EQU 1
MN_REPLYPORT EQU $E
MODE_NEWFILE EQU $3EE
MODE_OLDFILE EQU $3ED
OFFSET_END EQU 1
pr_MsgPort EQU $5C
pr_WindowPtr EQU $B8
RESIDENT_MAGIC EQU $4AFC
ThisTask EQU $114
TR_SETSYSTIME EQU $B
TV_SECS EQU 0
; Negative structure building macros
ALIGN MACRO
soff SET soff-(soff&1)
ENDM
STRUCT MACRO
soff SET soff-\2
ALIGN
\1 EQU soff
ENDM
LONG MACRO
ALIGN
soff SET soff-4
\1 EQU soff
ENDM
WORD MACRO
ALIGN
soff SET soff-2
\1 EQU soff
ENDM
BYTE MACRO
soff SET soff-1
\1 EQU soff
ENDM
SIZE MACRO
ALIGN
StrcSize EQU soff
ENDM
; Define default variables.
soff SET 0
LONG ComLineBase
LONG ComLineSize
WORD ReturnCode
; This requires A6 to be set properly! Keep track carefully or reload A6
CALL MACRO
JSR _LVO\1(A6)
ENDM
; This tells ARP's shell and resident how large a stack we require.
STACK MACRO
BRA.S ResStart
DC.W RESIDENT_MAGIC
DC.L \1
DC.L 0
ResStart:
ENDM
; The big one.
INIT MACRO
; Setup the stack structure (on stack for reentrability) (GP=A5, do not modify)
LINK GP,#StrcSize
MOVE.L SP,A1
ClearStackStruct:
CLR.W (A1)+
CMP.L A1,GP
BNE ClearStackStruct
; Initialize default variables
MOVE.W #InitError,ReturnCode(GP)
MOVE.L A0,ComLineBase(GP)
MOVE.L D0,ComLineSize(GP)
; Try to open ARP
MOVE.L $4.W,A6
LEA ArpName(PC),A1
MOVEQ #ArpVersion,D0
CALL OpenLibrary
TST.L D0
BNE.S OpenedOK
; Report that the ARP library could not be opened.
; MOVEQ #0,D0 ; Already 0
LEA DosName(PC),A1
CALL OpenLibrary
TST.L D0
BEQ.S ThisIsHorrible
MOVE.L D0,A6
CALL Output
MOVE.L D0,D1
BEQ.S BackToDOS
LEA LibErr(PC),A0
MOVE.L A0,D2
MOVEQ #StringEnd-LibErr,D3
CALL Write
; Return to DOS
BackToDOS:
MOVE.L A6,A1
MOVE.L $4.W,A6
CALL CloseLibrary
ThisIsHorrible:
MOVE.W ReturnCode(GP),D0
EXT.W D0
UNLK GP
RTS
; Support strings
IFGE ArpVersion-100
FAIL "Version > 3 digits"
ENDC
TMP SET ArpVersion/10
DosName DC.B 'dos.library',0
LibErr DC.B 'you need '
ArpName DC.B 'arp.library',0,' V',TMP+'0',(ArpVersion-(TMP*10))+'0','+',10
StringEnd:
CNOP 0,2
; A6 = ARP base (Do not modify A6 if you use CALL), lower error level, call user.
OpenedOK:
MOVE.L D0,A6
MOVE.W #NormError,ReturnCode(GP)
BSR.S UserCode
BRA BackToDOS
UserCode:
ENDM